/*
 * ComponenteDistribuidorModeloAsociado.java	
 *
 * Copyright 2008 Universidad Francisco de Paula Santander (UFPS).
 * Todos los Derechos Reservados.
 * Creado el 07/10/10, 11:23:38 AM
 */
package com.ufps.cuatro.modelo.representacion.componente;

import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

import com.ufps.cuatro.controlador.render.UtilRender;
import com.ufps.cuatro.modelo.biblioteca.TipoBiblioteca;
import com.ufps.cuatro.modelo.old.ComponenteBeans;
import com.ufps.cuatro.modelo.representacion.ModeloAsociado;
import com.ufps.cuatro.modelo.representacion.PlantillaCombo;
import com.ufps.cuatro.modelo.representacion.PlantillaComponente;
import com.ufps.cuatro.util.Utileria;
import com.ufps.cuatro.util.base.ComponenteBaseStandar;
import com.ufps.cuatro.util.generadores.codeobject.CodeContextLine;
import com.ufps.cuatro.util.generadores.codeobject.EnumTypeCodeSyntax;

/**
 * <i><b>ComponenteDistribuidorModeloAsociado:</b></i><p>Esta Clase permite representar Contenedores
 * Swing Ligeros.</p>
 * <p>Un Contenedor Swing Ligero es un Contenedor que permite contener varios
 * controles Swing pero que a su vez necesitan de un Contenedor para su Representación
 * gráfica por ejemplo el <code>JPanel</code>.  Esta Clase es utilizada en el Asistente
 * Libre y Permite generar Paneles Independientes que puedan ser Compartidos en
 * varias Representaciones.  Ademas es el Componente por defecto utilizado por la
 * Biblioteca de Plantillas.</p>
 * 
 * @author Carlos A. Torres C. - Dolly E. Guerrero. <https://code.google.com/p/tesis4dor/>
 * @version 1.0 07/10/10 
 * @see ComponenteDistribuidorIntegrador
 */
public class ComponenteDistribuidorModeloAsociado extends ComponenteDistribuidor{    
    private static final long serialVersionUID = 8754069460792344425L;    
    private int idClaseComponenteDistribuidorModeloAsociado;
    public final static int COMPONENTE_DISTRIBUIDOR_KEY = 0;
    public final static int COMPONENTE_DISTRIBUIDOR_OBJECT = 1;    
    /**
     * Serie Númerica para la generación de id de Objetos.
     */
    public static int serialIdComponenteDistribuidorModeloAsociado;  
    private ModeloAsociado objModeloAsociadoParent;
    private ComponenteDistribuidor objComponenteDistribuidorObject;
    private ComponenteDistribuidor objComponenteDistribuidorKey;

    /**
     * Contructor por Defecto que Inicializa Propiedades Básicas.
     * @param objComponenteBase Referencia <code>ComponenteBaseStandar</code> que Representa
     * el Contenedor Swing asociado a la Representación por los general será un <code>JPanel</code>.
     * @param modo Determina el Modo de Representación.
     * @param heredado Determina si el Componente representa un Objeto o es parte de una cadena de Herencia.
     * @param previsualizar Determina si el Objeto puede generar vistas previas.
     */
    public ComponenteDistribuidorModeloAsociado(ComponenteBaseStandar objComponenteBase, boolean heredado, boolean previsualizar) {
        super(objComponenteBase, heredado, previsualizar);
        this.heredado = heredado;
        this.previsualizar = previsualizar;        
	this.dni = Utileria.leerRecursoTexto("Utileria.dni.componente.distribuidor.modelo.asociado");   
        if(!heredado) {
            this.idClaseComponenteDistribuidorModeloAsociado = (!previsualizar) ?
                    ComponenteDistribuidorModeloAsociado.serialIdComponenteDistribuidorModeloAsociado++ :
                    ComponenteDistribuidorModeloAsociado.serialIdComponenteDistribuidorModeloAsociado;
        }
    }
    
    /**
     * Devuelve el id de creación del Componente. No se debe confundir con el #getId()
     * @return id de creación del Componente. No se debe confundir con el #getId()
     */
    public int getIdClaseComponenteDistribuidorModeloAsociado() {
        try{
            return idClaseComponenteDistribuidorModeloAsociado;
        }catch(java.lang.NullPointerException ex){
            UtilRender.printlnConsole("Error Objeto Nulo", ex.getMessage(), UtilRender.ACTION_ERROR);
        }
        return 0;
    }   
    
    public void crearDistribuicionGrupalInicial(PlantillaCombo objPlantillaCombo, ArrayList<PlantillaComponente> objTempPlantillasComponentes){                
        if(objPlantillaCombo != null && objTempPlantillasComponentes != null){
            ArrayList<Componente> objComponentesIncluidos = new ArrayList<Componente>();
            //Ubicar cada Plantilla con el Componente Asigando y Actualizar
            //Esta busqueda se hace por medio del id        
            for(PlantillaComponente objTempPlantillaComponente : objTempPlantillasComponentes){            
                if(objTempPlantillaComponente.getRepresentacion() == PlantillaComponente.DISTRIBUIDOR_OBJECT_MODELO_ASOCIADO){                                
                    objComponenteDistribuidorObject.agregarDistribucionIndividual(objPlantillaCombo, objTempPlantillaComponente);
                    objComponentesIncluidos.add(objComponenteDistribuidorObject);            
                }
                else if(objTempPlantillaComponente.getRepresentacion() == PlantillaComponente.DISTRIBUIDOR_KEY_MODELO_ASOCIADO){                                
                    objComponenteDistribuidorKey.agregarDistribucionIndividual(objPlantillaCombo, objTempPlantillaComponente);
                    objComponentesIncluidos.add(objComponenteDistribuidorKey);            
                }
            }
            Distribuidor objDistribuidor = new Distribuidor(objComponentesIncluidos, objPlantillaCombo);
            this.agregarDistribucionGrupal(objPlantillaCombo, objDistribuidor);        
        } else{
            UtilRender.printlnConsole("PLantilla Nulo.", UtilRender.ACTION_NORMAL, false);            
        }    
    }
         
    public ArrayList<PlantillaComponente> getDistribucionGrupalInicialHorizontal(PlantillaCombo objPlantillaCombo){
        try{
            try{            
                int filas = 0;
                int proxX = 0;     
                int i = 0;
                ArrayList<PlantillaComponente> objTempPlantillas = new ArrayList<PlantillaComponente>();
                if(objComponenteDistribuidorObject != null){
                    PlantillaComponente objPlantilla = new PlantillaComponente();
                    objPlantilla.setRepresentacion(PlantillaComponente.DISTRIBUIDOR_OBJECT_MODELO_ASOCIADO);                                
                    objPlantilla.setX(proxX);
                    objPlantilla.setY(filas);                    
                    objPlantilla.updateGridBadConstraintsFromComponente(objComponenteDistribuidorObject, objPlantillaCombo, true);
                    objPlantilla.setGenerador(true);
                    objPlantilla.setHeight(objComponenteDistribuidorObject.getObjGridBagConstraints().gridheight);
                    objPlantilla.setWidth(objComponenteDistribuidorObject.getObjGridBagConstraints().gridwidth);                    
                    objPlantilla.setIdComponente(objComponenteDistribuidorObject.getId());
                    objPlantilla.setId(i++);
                    objPlantilla.setIdPlantilla(0);
                    objPlantilla.setIncluido(true);
                    objPlantilla.setZona(0);                            
                    proxX += objPlantilla.getObjGridBagConstraints().gridwidth;
                    objTempPlantillas.add(objPlantilla);
                }
                if(objComponenteDistribuidorKey != null){
                    PlantillaComponente objPlantilla = new PlantillaComponente();
                    objPlantilla.setRepresentacion(PlantillaComponente.DISTRIBUIDOR_KEY_MODELO_ASOCIADO);                                
                    objPlantilla.setX(proxX);
                    objPlantilla.setY(filas);                    
                    objPlantilla.updateGridBadConstraintsFromComponente(objComponenteDistribuidorKey, objPlantillaCombo, true);
                    objPlantilla.setGenerador(true);
                    objPlantilla.setHeight(objComponenteDistribuidorKey.getObjGridBagConstraints().gridheight);
                    objPlantilla.setWidth(objComponenteDistribuidorKey.getObjGridBagConstraints().gridwidth);                    
                    objPlantilla.setIdComponente(objComponenteDistribuidorKey.getId());
                    objPlantilla.setId(i++);
                    objPlantilla.setIdPlantilla(0);
                    objPlantilla.setIncluido(true);
                    objPlantilla.setZona(0);                            
                    proxX += objPlantilla.getObjGridBagConstraints().gridwidth;
                    objTempPlantillas.add(objPlantilla);
                }                         
                return objTempPlantillas;
            }catch(java.lang.Exception ex){
                Logger.getLogger(ComponenteDistribuidorGeneradorClaseCompleja.class.getName()).log(Level.SEVERE, null, ex);            
            }
        }catch(java.lang.NullPointerException ex){
            UtilRender.printlnConsole("Error Objeto Nulo", ex.getMessage(), UtilRender.ACTION_ERROR);
        }
        return null;
    }
    
    public ArrayList<PlantillaComponente> getDistribucionGrupalInicialVertical(PlantillaCombo objPlantillaCombo){
        try{
            try{            
                int columnas = 0;
                int proxX = 0;
                int i = 0;
                ArrayList<PlantillaComponente> objTempPlantillas = new ArrayList<PlantillaComponente>();
                if(objComponenteDistribuidorObject != null){
                    PlantillaComponente objPlantilla = new PlantillaComponente();
                    objPlantilla.setRepresentacion(PlantillaComponente.DISTRIBUIDOR_OBJECT_MODELO_ASOCIADO);                                    
                    objPlantilla.setX(columnas);
                    objPlantilla.setY(proxX);                    
                    objPlantilla.updateGridBadConstraintsFromComponente(objComponenteDistribuidorObject, objPlantillaCombo, true);
                    objPlantilla.setGenerador(true);
                    objPlantilla.setHeight(objComponenteDistribuidorObject.getObjGridBagConstraints().gridheight);
                    objPlantilla.setWidth(objComponenteDistribuidorObject.getObjGridBagConstraints().gridwidth);                    
                    objPlantilla.setIdComponente(objComponenteDistribuidorObject.getId());
                    objPlantilla.setId(i++);
                    objPlantilla.setIdPlantilla(0);
                    objPlantilla.setIncluido(true);
                    objPlantilla.setZona(0);
                    proxX += objPlantilla.getObjGridBagConstraints().gridheight;
                    objTempPlantillas.add(objPlantilla);
                }           
                if(objComponenteDistribuidorKey != null){
                    PlantillaComponente objPlantilla = new PlantillaComponente();
                    objPlantilla.setRepresentacion(PlantillaComponente.DISTRIBUIDOR_KEY_MODELO_ASOCIADO);                                    
                    objPlantilla.setX(columnas);
                    objPlantilla.setY(proxX);                    
                    objPlantilla.updateGridBadConstraintsFromComponente(objComponenteDistribuidorKey, objPlantillaCombo, true);
                    objPlantilla.setGenerador(true);
                    objPlantilla.setHeight(objComponenteDistribuidorKey.getObjGridBagConstraints().gridheight);
                    objPlantilla.setWidth(objComponenteDistribuidorKey.getObjGridBagConstraints().gridwidth);                    
                    objPlantilla.setIdComponente(objComponenteDistribuidorKey.getId());
                    objPlantilla.setId(i++);
                    objPlantilla.setIdPlantilla(0);
                    objPlantilla.setIncluido(true);
                    objPlantilla.setZona(0);
                    proxX += objPlantilla.getObjGridBagConstraints().gridheight;
                    objTempPlantillas.add(objPlantilla);
                }               
                return objTempPlantillas;
            }catch(java.lang.Exception ex){
                Logger.getLogger(ComponenteDistribuidorGeneradorClaseCompleja.class.getName()).log(Level.SEVERE, null, ex);
            }
        }catch(java.lang.NullPointerException ex){
            UtilRender.printlnConsole("Error Objeto Nulo", ex.getMessage(), UtilRender.ACTION_ERROR);
        }
        return null;
    }
    
    public ArrayList<PlantillaComponente> getDistribucionGrupalInicialRectangular(PlantillaCombo objPlantillaCombo){
        try{
            try{
                return null;
            }catch(java.lang.Exception ex){
                Logger.getLogger(ComponenteDistribuidorGeneradorClaseCompleja.class.getName()).log(Level.SEVERE, null, ex);
            }
        }catch(java.lang.NullPointerException ex){
            UtilRender.printlnConsole("Error Objeto Nulo", ex.getMessage(), UtilRender.ACTION_ERROR);
        }
        return null;
    }    
    
    @Override    
    public String toString() {
        try{
            if(this.eBiblioteca == TipoBiblioteca.eSwap) {
                return this.objClassSwing.getSimpleName() + "BS" + this.dni + this.idClaseComponenteDistribuidorModeloAsociado;
            }
            else if(this.eBiblioteca == TipoBiblioteca.eLocal) {
                return this.objClassSwing.getSimpleName() + "BL" + this.dni + this.idClaseComponenteDistribuidorModeloAsociado;
            }
            else if(this.eBiblioteca == TipoBiblioteca.eGlobal) {
                return this.objClassSwing.getSimpleName() + "BG" + this.dni + this.idClaseComponenteDistribuidorModeloAsociado;
            }
            else if(this.getObjPropiedadesDisponibles() != null){            
                //se evalua si la propiedad name ha sido inicializada
                if(!this.getObjPropiedadesDisponibles().isEmpty()){                
                    return this.getName();
                }
            }
            return this.objClassSwing.getSimpleName() + this.dni + this.idClaseComponenteDistribuidorModeloAsociado;
        }catch(java.lang.NullPointerException ex){
            UtilRender.printlnConsole("Error Objeto Nulo", ex.getMessage(), UtilRender.ACTION_ERROR);
        }
        return "";
    }   
    
    @Override
    public int compareTo(Object o) {
        try{
            ComponenteDistribuidorModeloAsociado obj = (ComponenteDistribuidorModeloAsociado) o;
            if(this.idClaseComponenteDistribuidorModeloAsociado > obj.idClaseComponenteDistribuidorModeloAsociado) {
                return 1;
            }
            else if(this.idClaseComponenteDistribuidorModeloAsociado < obj.idClaseComponenteDistribuidorModeloAsociado) {
                return -1;
            }
            else {
                return 0;
            }
        }catch(java.lang.NullPointerException ex){
            UtilRender.printlnConsole("Error Objeto Nulo", ex.getMessage(), UtilRender.ACTION_ERROR);
        }
        return 0;
    }  
    
    public boolean actualizarPlantillaComboDistribucionGrupalSeleccionada(PlantillaCombo objPlantillaComboDistribucionGrupalSeleccionada) {
        try{
            try{
                if(this.objPlantillaComboDistribucionIndividualSeleccionada == null){
                    this.objPlantillaComboDistribucionIndividualSeleccionada = objPlantillaComboDistribucionGrupalSeleccionada;
                }
                this.objPlantillaComboDistribucionGrupalSeleccionada = objPlantillaComboDistribucionGrupalSeleccionada;            
                if(objComponenteDistribuidorObject != null){
                    objComponenteDistribuidorObject.objPlantillaComboDistribucionIndividualSeleccionada = objPlantillaComboDistribucionGrupalSeleccionada;
                }
                if(objComponenteDistribuidorKey != null){
                    objComponenteDistribuidorKey.objPlantillaComboDistribucionIndividualSeleccionada = objPlantillaComboDistribucionGrupalSeleccionada;
                }
                for(ComponenteGeneradoSimple objComponenteGenerado : this.objComponentesGenerados){
                    objComponenteGenerado.setObjPlantillaComboDistribucionIndividualSeleccionada(objPlantillaComboDistribucionGrupalSeleccionada);
                }            
                return true;
            }catch(java.lang.ArrayIndexOutOfBoundsException ex){
                Logger.getLogger(ComponenteDistribuidorGeneradorClaseCompleja.class.getName()).log(Level.SEVERE, null, ex);            
            }catch(java.lang.ArrayStoreException ex){
                Logger.getLogger(ComponenteDistribuidorGeneradorClaseCompleja.class.getName()).log(Level.SEVERE, null, ex);            
            }
        }catch(java.lang.NullPointerException ex){
            UtilRender.printlnConsole("Error Objeto Nulo", ex.getMessage(), UtilRender.ACTION_ERROR);
        }
        return false;
    }      

    @Override
    public void ok() {
        if(this.previsualizar){
            this.idClaseComponenteDistribuidorModeloAsociado = ComponenteDistribuidorModeloAsociado.serialIdComponenteDistribuidorModeloAsociado++;
            this.previsualizar = false;
        }
    }   
    
    public void importId(int id){
        ComponenteDistribuidorModeloAsociado.serialIdComponenteDistribuidorModeloAsociado = ++id;
        this.idClaseComponenteDistribuidorModeloAsociado = ComponenteDistribuidorModeloAsociado.serialIdComponenteDistribuidorModeloAsociado++;
    }

    public ComponenteDistribuidor getObjComponenteDistribuidorKey() {
        try{
            return objComponenteDistribuidorKey;
        }catch(java.lang.NullPointerException ex){
            UtilRender.printlnConsole("Error Objeto Nulo", ex.getMessage(), UtilRender.ACTION_ERROR);
        }
       return null;
    }

    public void setObjComponenteDistribuidorKey(ComponenteDistribuidor objComponenteDistribuidorKey) {
        this.objComponenteDistribuidorKey = objComponenteDistribuidorKey;
    }

    public ComponenteDistribuidor getObjComponenteDistribuidorObject() {
        try{
            return objComponenteDistribuidorObject;
        }catch(java.lang.NullPointerException ex){
            UtilRender.printlnConsole("Error Objeto Nulo", ex.getMessage(), UtilRender.ACTION_ERROR);
        }
       return null;
    }

    public void setObjComponenteDistribuidorObject(ComponenteDistribuidor objComponenteDistribuidorObject) {
        this.objComponenteDistribuidorObject = objComponenteDistribuidorObject;
    }

    public ModeloAsociado getObjModeloAsociadoParent() {
        try{
            return objModeloAsociadoParent;
        }catch(java.lang.NullPointerException ex){
            UtilRender.printlnConsole("Error Objeto Nulo", ex.getMessage(), UtilRender.ACTION_ERROR);
        }
        return null;
    }

    public void setObjModeloAsociadoParent(ModeloAsociado objModeloAsociadoParent) {
        this.objModeloAsociadoParent = objModeloAsociadoParent;
    }    
    
    @Override
    public boolean equals(Object obj) {
        if(obj instanceof ComponenteDistribuidorModeloAsociado){
            ComponenteDistribuidorModeloAsociado objComponente = (ComponenteDistribuidorModeloAsociado) obj;
            return this.toString().equals(objComponente.toString());
        }
        return super.equals(obj);
    }

    @Override
    public int hashCode() {
        try{
            int hash = 3;
            hash = 67 * hash + this.idClaseComponenteDistribuidorModeloAsociado;
            return hash;
        }catch(java.lang.NullPointerException ex){
            UtilRender.printlnConsole("Error Objeto Nulo", ex.getMessage(), UtilRender.ACTION_ERROR);
        }
        return 0;
    }       

    @Override
    public Componente getObjComponenteIncluido(String strName) {        
        try{
            String strPropertiesName = objComponenteDistribuidorObject.getName();
            if(strName.equals(strPropertiesName)){
                return objComponenteDistribuidorObject;
            }
            if(objComponenteDistribuidorKey != null){
                strPropertiesName = objComponenteDistribuidorKey.getName();
                if(strName.equals(strPropertiesName)){
                    return objComponenteDistribuidorKey;
                }            
            }
            for(Componente objComponente : this.objComponentesGenerados){
                strPropertiesName = objComponente.getName();
                if(strName.equals(strPropertiesName)){
                    return objComponente;
                }                
            }
        }catch(java.lang.NullPointerException ex){
            UtilRender.printlnConsole("Error Objeto Nulo", ex.getMessage(), UtilRender.ACTION_ERROR);
        }
        return null;
    }

    @Override
    public Componente buscarComponente(String strName) {
        try{
            try{       
                strName = Utileria.formatStringSinHTML(strName);
                Componente objComponente;
                //Primero se Busca en la Colección de Componentes Incluidos
                objComponente = this.buscarComponenteEnDistribucion(strName);
                if(objComponente != null){
                    return objComponente;
                }
                //Luego busco en los Componentes Generados
                objComponente = this.getObjComponenteIncluido(strName);
                if(objComponente != null){
                    return objComponente;
                }
                objComponente = this.buscarComponenteGenerado(strName);
                if(objComponente != null){
                    return objComponente;
                }
            }catch(java.lang.NullPointerException ex){          
                UtilRender.printlnConsole("Error Objeto Nulo", ex.getMessage(), UtilRender.ACTION_ERROR);
            }
        }catch(java.lang.NullPointerException ex){
            UtilRender.printlnConsole("Error Objeto Nulo", ex.getMessage(), UtilRender.ACTION_ERROR);
        }
        return null;
    }

    public int sizeWidth() {
        try{
            int size = 0;      
            size += objComponenteDistribuidorObject.getObjPlantillaComponenteDistribucionIndividualSeleccionada().getObjGridBagConstraints().gridwidth;
            if(objComponenteDistribuidorKey != null){
                size += objComponenteDistribuidorKey.getObjPlantillaComponenteDistribucionIndividualSeleccionada().getObjGridBagConstraints().gridwidth;
            }
            return size;  
        }catch(java.lang.NullPointerException ex){
            UtilRender.printlnConsole("Error Objeto Nulo", ex.getMessage(), UtilRender.ACTION_ERROR);
        }
        return 0;
    }

    public int sizeHeight() {
        try{
            int size = 0;      
            size += objComponenteDistribuidorObject.getObjPlantillaComponenteDistribucionIndividualSeleccionada().getObjGridBagConstraints().gridheight;
            if(objComponenteDistribuidorKey != null){
                size += objComponenteDistribuidorKey.getObjPlantillaComponenteDistribucionIndividualSeleccionada().getObjGridBagConstraints().gridheight;
            }
            return size;  
        }catch(java.lang.NullPointerException ex){
            UtilRender.printlnConsole("Error Objeto Nulo", ex.getMessage(), UtilRender.ACTION_ERROR);
        }
        return 0;
    }

    public boolean ubicarComponentesEnTablaDistribucion() {
        try{
            Distribuidor objDistribuidorSeleccionado = this.getObjDistribuidorGrupalSeleccionado();
            return objDistribuidorSeleccionado.generarTablaDistribucion();
        }catch(java.lang.Exception ex){
            Logger.getLogger(ComponenteDistribuidorGeneradorClaseCompleja.class.getName()).log(Level.SEVERE, null, ex);
        }
        return false;
    }
    
    public ComponenteBeans generarRepresentacionBeans() {
        try{
            ComponenteBeans objTempComponenteBeans = new ComponenteBeans(this);        
            objTempComponenteBeans.add(objComponenteDistribuidorObject.getObjComponenteBeans());        
            if(objComponenteDistribuidorKey != null){
                objTempComponenteBeans.add(objComponenteDistribuidorKey.getObjComponenteBeans());        
            }
            return objTempComponenteBeans;
        }catch(java.lang.NullPointerException ex){
            UtilRender.printlnConsole("Error Objeto Nulo", ex.getMessage(), UtilRender.ACTION_ERROR);
        }
        return null;
    }

    @Override
    public ArrayList<CodeContextLine> generateSourceCodeSyntax(EnumTypeCodeSyntax eTypeCodeSintax) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public CodeContextLine generateSingleSourceCodeSyntax(EnumTypeCodeSyntax eTypeCodeSintax) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void generateSourceCodeSyntaxFaseFieldDefinitionInstance(ArrayList<CodeContextLine> objSourceLinesCode) {
        try{            
            for(Componente objComponenteDistribuido : getComponentesDistribuidos()){
                if(objComponenteDistribuido instanceof ComponenteDistribuidor){
                    ComponenteDistribuidor objComponenteDistribuidor = (ComponenteDistribuidor) objComponenteDistribuido;
                    if(objComponenteDistribuido.isIncluido()){
                        addSourceCode(objSourceLinesCode, objComponenteDistribuidor.generateSourceCodeSyntaxDefinition(false));
                    }
                }
            }
        }catch(java.lang.Exception ex){
            Logger.getLogger(ComponenteDistribuidorContenedorEspejo.class.getName()).log(Level.SEVERE, null, ex);
        }   
    }

    @Override
    public void generateSourceCodeSyntaxFaseFieldDefinitionClass(ArrayList<CodeContextLine> objSourceLinesCode) {
        try{            
            for(Componente objComponenteDistribuido : getComponentesDistribuidos()){
                if(objComponenteDistribuido instanceof ComponenteDistribuidor){
                    ComponenteDistribuidor objComponenteDistribuidor = (ComponenteDistribuidor) objComponenteDistribuido;                    
                    if(objComponenteDistribuido.isIncluido()){                        
                    }
                }
            }
        }catch(java.lang.Exception ex){
            Logger.getLogger(ComponenteDistribuidorContenedorEspejo.class.getName()).log(Level.SEVERE, null, ex);
        }   
    }

    @Override
    public void generateSourceCodeSyntaxFaseFieldDefinitionConstant(ArrayList<CodeContextLine> objSourceLinesCode) {
        try{            
            for(Componente objComponenteDistribuido : getComponentesDistribuidos()){
                if(objComponenteDistribuido instanceof ComponenteDistribuidor){
                    ComponenteDistribuidor objComponenteDistribuidor = (ComponenteDistribuidor) objComponenteDistribuido;                    
                    if(objComponenteDistribuido.isIncluido()){                        
                    }
                }
            }
        }catch(java.lang.Exception ex){
            Logger.getLogger(ComponenteDistribuidorContenedorEspejo.class.getName()).log(Level.SEVERE, null, ex);
        }   
    }

    @Override
    public void generateSourceCodeSyntaxFaseFieldInitializationInstance(ArrayList<CodeContextLine> objSourceLinesCode) {
        try{            
            for(Componente objComponenteDistribuido : getComponentesDistribuidos()){
                if(objComponenteDistribuido instanceof ComponenteDistribuidor){
                    ComponenteDistribuidor objComponenteDistribuidor = (ComponenteDistribuidor) objComponenteDistribuido;
                    if(objComponenteDistribuido.isIncluido()){
                        addSourceCode(objSourceLinesCode, objComponenteDistribuidor.generateSourceCodeSyntaxInitialization(false));
                    }                    
                }
            }
        }catch(java.lang.Exception ex){
            Logger.getLogger(ComponenteDistribuidorContenedorEspejo.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @Override
    public void generateSourceCodeSyntaxFaseFieldInitializationClass(ArrayList<CodeContextLine> objSourceLinesCode) {
        try{            
            for(Componente objComponenteDistribuido : getComponentesDistribuidos()){
                if(objComponenteDistribuido instanceof ComponenteDistribuidor){
                    ComponenteDistribuidor objComponenteDistribuidor = (ComponenteDistribuidor) objComponenteDistribuido;                    
                    if(objComponenteDistribuido.isIncluido()){                        
                    }
                }
            }
        }catch(java.lang.Exception ex){
            Logger.getLogger(ComponenteDistribuidorContenedorEspejo.class.getName()).log(Level.SEVERE, null, ex);
        } 
    }

    @Override
    public void generateSourceCodeSyntaxFaseFieldInitializationProperties(ArrayList<CodeContextLine> objSourceLinesCode) {
        try{            
            for(Componente objComponenteDistribuido : getComponentesDistribuidos()){
                if(objComponenteDistribuido instanceof ComponenteDistribuidor){
                    ComponenteDistribuidor objComponenteDistribuidor = (ComponenteDistribuidor) objComponenteDistribuido;                    
                    if(objComponenteDistribuido.isIncluido()){                        
                    }
                }
            }
        }catch(java.lang.Exception ex){
            Logger.getLogger(ComponenteDistribuidorContenedorEspejo.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @Override
    public void generateSourceCodeSyntaxFaseFieldInitializationGridBagConstraints(ArrayList<CodeContextLine> objSourceLinesCode) {
        try{            
            for(Componente objComponenteDistribuido : getComponentesDistribuidos()){
                if(objComponenteDistribuido instanceof ComponenteDistribuidor){
                    ComponenteDistribuidor objComponenteDistribuidor = (ComponenteDistribuidor) objComponenteDistribuido;
                    if(objComponenteDistribuido.isIncluido()){
                        addSourceCode(objSourceLinesCode, objComponenteDistribuidor.generateSourceCodeSyntaxGridBagConstraints(objComponenteDistribuidor.getObjGridBagConstraintsGUI(), true));
                    }
                }
            }
        }catch(java.lang.Exception ex){
            Logger.getLogger(ComponenteDistribuidorContenedorEspejo.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @Override
    public void generateSourceCodeSyntaxFaseMethodDefinitionEvent(ArrayList<CodeContextLine> objSourceLinesCode) {
        try{            
            for(Componente objComponenteDistribuido : getComponentesDistribuidos()){
                if(objComponenteDistribuido instanceof ComponenteDistribuidor){
                    ComponenteDistribuidor objComponenteDistribuidor = (ComponenteDistribuidor) objComponenteDistribuido;
                    if(objComponenteDistribuido.isIncluido()){                        
                    }
                }
            }
        }catch(java.lang.Exception ex){
            Logger.getLogger(ComponenteDistribuidorContenedorEspejo.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @Override
    public void generateSourceCodeSyntaxFaseMethodImplementEvent(ArrayList<CodeContextLine> objSourceLinesCode) {
        try{            
            for(Componente objComponenteDistribuido : getComponentesDistribuidos()){
                if(objComponenteDistribuido instanceof ComponenteDistribuidor){
                    ComponenteDistribuidor objComponenteDistribuidor = (ComponenteDistribuidor) objComponenteDistribuido;
                    if(objComponenteDistribuido.isIncluido()){                        
                    }                    
                }
            }
        }catch(java.lang.Exception ex){
            Logger.getLogger(ComponenteDistribuidorContenedorEspejo.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @Override
    public void generateSourceCodeSyntaxFaseMethodImplementFunctionSet(ArrayList<CodeContextLine> objSourceLinesCode) {
        try{            
            for(Componente objComponenteDistribuido : getComponentesDistribuidos()){
                if(objComponenteDistribuido instanceof ComponenteDistribuidor){
                    ComponenteDistribuidor objComponenteDistribuidor = (ComponenteDistribuidor) objComponenteDistribuido;
                    if(objComponenteDistribuido.isIncluido()){
                        addSourceCode(objSourceLinesCode, objComponenteDistribuidor.generateSourceCodeSyntaxFunctionGetSet(false));
                    }                    
                }
            }
        }catch(java.lang.Exception ex){
            Logger.getLogger(ComponenteDistribuidorContenedorEspejo.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @Override
    public void generateSourceCodeSyntaxFaseMethodImplementFunctionGet(ArrayList<CodeContextLine> objSourceLinesCode) {
        try{            
            for(Componente objComponenteDistribuido : getComponentesDistribuidos()){
                if(objComponenteDistribuido instanceof ComponenteDistribuidor){
                    ComponenteDistribuidor objComponenteDistribuidor = (ComponenteDistribuidor) objComponenteDistribuido;
                    if(objComponenteDistribuido.isIncluido()){
                        addSourceCode(objSourceLinesCode, objComponenteDistribuidor.generateSourceCodeSyntaxFunctionGetSet(false));
                    }
                }
            }
        }catch(java.lang.Exception ex){
            Logger.getLogger(ComponenteDistribuidorContenedorEspejo.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    /**
     * Generar el Código del boton aceptar del Dialog del Modelo asociado.
     * @param objSourceCode Contexto de Generación de Código Actual.
     */
    public void generateSourceCodeSyntaxDialogButtonOk(ArrayList<CodeContextLine> objSourceCode){  
        try{
            String strLineCode = "objReturn = jPanelModeloAsociado.encapsularObj();\n";            
            objSourceCode.add(new CodeContextLine(strLineCode));            
            strLineCode = "if(objReturn != null)dispose();\n";
            objSourceCode.add(new CodeContextLine(strLineCode));
        }catch(java.lang.Exception ex){
            Logger.getLogger(Componente.class.getName()).log(Level.SEVERE, null, ex);
        }        
    }
    
    /**
     * Generar el Código del boton aceptar del Dialog del Modelo asociado.
     * @param objSourceCode Contexto de Generación de Código Actual.
     */
    public void generateSourceCodeSyntaxDialogButtonCancel(ArrayList<CodeContextLine> objSourceCode){  
        try{
            String strLineCode = "objReturn = null;\n";
            objSourceCode.add(new CodeContextLine(strLineCode));            
            strLineCode = "dispose();\n";
            objSourceCode.add(new CodeContextLine(strLineCode));
        }catch(java.lang.Exception ex){
            Logger.getLogger(Componente.class.getName()).log(Level.SEVERE, null, ex);
        }        
    }

    
}